/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufrn.dimap.Visitors;

import br.ufrn.dimap.Grafo.Comentario;
import br.ufrn.dimap.Grafo.Postagem;
import br.ufrn.dimap.Grafo.Rede;
import br.ufrn.dimap.Grafo.Usuario;
import br.ufrn.dimap.contagem.UsuarioPostFlooders;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public class AmigosFloodersVisitor extends Visitor {

    private ArrayList<UsuarioPostFlooders> usuarioPost;
    
    public AmigosFloodersVisitor(Rede rede){
    	
    	PessoasNaRedeVisitor pessoas = new PessoasNaRedeVisitor();
    	rede.accept(pessoas);
    	ArrayList<String> pessoasNaRede = pessoas.getPessoas();
        for (int i = 0; i < pessoasNaRede.size(); i++)
        {
            usuarioPost.add(new UsuarioPostFlooders(pessoasNaRede.get(i)));
        }
    }
    
    public int posicaoUsuario(String nome)
    {
    	for (int i = 0; i < usuarioPost.size(); i++)
    	{
    		if (nome == usuarioPost.get(i).getNome())
    			return i;
    	}
    	return -1;
    }
    
    public void visit(Usuario usuario)
    {
    	int posicao = posicaoUsuario(usuario.getNome());
        if(usuario.getPosts() != null && posicao > -1){
            Iterator<Postagem> posts = usuario.getPosts().iterator();

            while(posts.hasNext())
            {
                usuarioPost.get(posicao).addContPosts();
                Postagem post = posts.next();
                Iterator<Comentario> comentarios = post.getComentarios().iterator();

                while(comentarios.hasNext()){
                    Comentario comentario = comentarios.next();
                    for (int i = 0; i < usuarioPost.size(); i++)
                    {
                            if(comentario.getAutor() == usuarioPost.get(i).getNome())
                                usuarioPost.get(i).addContPosts();
                    }
                }
            }
        }
    }
    
    public String getFlooder()
    {
        /*
         *  COLOCAR AQUI O MÉTODO DE ORDENAÇÃO E MUDAR O RETORNO PARA UM ARRAYLIST
         */
    	int indiceMaior = 0;
        int pontuacaoMaior = 0;
        int pontuacao;
    	for (int i = 0; i < usuarioPost.size(); i++)
    	{
            pontuacao = usuarioPost.get(i).getPontos();
    		if (pontuacao > pontuacaoMaior)
                {
    			indiceMaior = i;
                        pontuacaoMaior = pontuacao;
                }
    	}
    	return usuarioPost.get(indiceMaior).getNome();
    }
}